//
//  CoinListViewController.swift
//  Wallet
//
//  Created by Julian on 2022/5/7.
//

import UIKit
import RxSwift

/// 为了考虑页面复用，拆分了 WalletDetail 和 CoinList，都是项目中可能多出需要使用的
class CoinListViewController: UITableViewController {
    
    var viewModel: WalletViewModel?
    let bag = DisposeBag()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // 页面使用的是 UITableViewController，使用 rx 时需要置空
        self.tableView.delegate = nil
        self.tableView.dataSource = nil
        // 刷新事件
        self.tableView.refreshControl?.addTarget(self, action:#selector(self.refreshData), for: .valueChanged)
    }
    
    @objc func refreshData() {
        viewModel?.requestData()
    }
    
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        guard let vc = self.parent as? HomeViewController else {
            return
        }
        self.setupBinding(vm: vc.viewModel)
    }
}

// MARK: - 界面数据绑定
extension CoinListViewController {
    func setupBinding(vm: WalletViewModel) {
        self.viewModel = vm
        
        // 刷新事件
        viewModel?.dataSourceDriver
            .drive { [weak self] _ in
                self?.refreshControl?.rx.isRefreshing.onNext(false)
            }.disposed(by: bag)
        
        // cell 创建与复用
        viewModel?.dataSourceDriver
            .drive(self.tableView.rx.items) { tableView, row, item  in
                guard let cell = tableView.dequeueReusableCell(withIdentifier: CoinCell.reuseIndentifier) as? CoinCell else {
                    // FIXME: - 有没有更好的办法
                    return UITableViewCell()
                }
                cell.bind(vm: item)
                return cell
            }.disposed(by: bag)
        
        // cell 点击事件
        tableView.rx.itemSelected
            .subscribe(onNext: { indexPath in
                print("选中：\(indexPath)")
            }).disposed(by: bag)
    }
}
